﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using vudu.ClasesDominio;
using vudu.Logica.Clases;

namespace vudu.Datos.SqlServer
{
    public class SqlServerReporte
    {
        #region ConsultarMateriaSeccionProfesor
        /// <summary>
        /// Este metodo consulta una materia con su seccion en la base de datos
        /// </summary>
        /// <returns>retorna un objeto de tipo seccion materia</returns>
        public List<SeccionMateria> ConsultarMateriaSeccionProfesor(int idProfesor)
        {
            //se instancia un objeto de tipo conexion y sqlCommand para acceder a la base de datos
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarMateriasReporte]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", idProfesor);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                //se carga la informacion desde la base de datos
                List<SeccionMateria> seccionesConsultadas = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                    seccionMateria.IdSeccionMateria = reader.GetInt32(0);
                    seccionMateria.Codigo = reader.GetInt32(1);
                    seccionMateria.Materia.Nombre = reader.GetString(2);
                    seccionMateria.Profesor.Cedula = idProfesor;
                    seccionesConsultadas.Add(seccionMateria);
                }
                return seccionesConsultadas;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

        #region ConsultarPracticaProfesor
        /// <summary>
        /// Este metodo consulta una practica en la base de datos
        /// </summary>
        /// <returns>retorna un objeto de tipo practica</returns>

        public List<Practica> ConsultarPracticaProfesor(int idProfesor)
        {
            //se instancia un objeto de tipo conexion y sqlCommand para acceder a la base de datos
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarPracticasReporte]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", idProfesor);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                //se carga la informacion desde la base de datos
                List<Practica> practicasConsultadas = new List<Practica>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Practica practica = new Practica();
                    Profesor profesorc = new Profesor();
                    practica.IdPractica = reader.GetInt32(0);
                    practica.NumeroSeccion = reader.GetInt32(1);
                    practica.NombrePractica = reader.GetString(2);
                    profesorc.Cedula = idProfesor;
                    practica.profesor = profesorc;
                    practicasConsultadas.Add(practica);
                }
                return practicasConsultadas;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

        #region ConsultarEstudiantes
        /// <summary>
        /// Este metodo consulta estudiantes en la base de datos
        /// </summary>
        /// <returns>retorna un objeto de tipo estudiantes</returns>

        public List<Estudiante> ConsultarEstudiantes(int idSeccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand para acceder a la base de datos
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarEstudiantesReporte]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idSeccion", idSeccion);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                //se carga la informacion desde la base de datos
                List<Estudiante> estudiantesConsultados = new List<Estudiante>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Estudiante estudiante = new Estudiante();
                    estudiante.Cedula = reader.GetInt32(0);
                    estudiante.Nombre = reader.GetString(1);
                    estudiante.Apellido = reader.GetString(2);
                    estudiante.IdEst = reader.GetInt32(3);
                    estudiantesConsultados.Add(estudiante);
                }
                return estudiantesConsultados;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

        #region ConsultarEvaluacion
        /// <summary>
        /// Este metodo consulta evaluacion en la base de datos
        /// </summary>
        /// <returns>retorna un objeto de tipo evaluacion</returns>

        public List<Evaluacion> ConsultarEvaluacion(int idSeccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand para acceder a la base de datos
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarEvaluacionReporte]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idSeccion", idSeccion);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                //se carga la informacion desde la base de datos
                List<Evaluacion> evaluacionConsultada = new List<Evaluacion>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Evaluacion evaluaciones = new Evaluacion();
                    evaluaciones.IdEvaluacion = reader.GetInt32(0);
                    evaluaciones.Nombre = reader.GetString(1);
                    evaluaciones.Porcentaje = reader.GetInt32(2);
                    evaluaciones.TipoEvaluacion = reader.GetString(3);
                    evaluaciones.FechaEvaluacion = reader.GetDateTime(4);
                    evaluaciones.FkIdSeccion = reader.GetInt32(5);
                    evaluacionConsultada.Add(evaluaciones);
                }
                return evaluacionConsultada;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

        #region ConsultarNotas
        /// <summary>
        /// Este metodo consulta evaluacion en la base de datos
        /// </summary>
        /// <returns>retorna un objeto de tipo evaluacion</returns>

        public List<Nota> ConsultarNotas(int idEvaluacion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand para acceder a la base de datos
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarNotaReporte]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idEvaluacion", idEvaluacion);
                command.Parameters["@idEvaluacion"].Direction = ParameterDirection.Input;
                //se carga la informacion desde la base de datos
                List<Nota> notaConsultada = new List<Nota>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Nota notas = new Nota();
                    notas.NotaObtenida = reader.GetInt32(0);
                    notas.Estudiante.IdEst = reader.GetInt32(1);
                    notaConsultada.Add(notas);
                }
                return notaConsultada;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

    }
    
}